/**
 * TODO: Vložit licenci.
 */

package cz.enif.commander.values;

import java.util.List;

/**
 * Vytváří hodnoty s udaným typem.
 *
 * @author Přemysl Fára
 */
public final class ValueFactory 
{
	//// CONSTRUCTORS ////
	
    /**
     * Konstruktor.
     */
    private ValueFactory()
    {
    }

    //// STATIC ////

    /**
     * Vytvoří nový objekt Value typu BOOLEAN se zadanou hodnotou.
     *
     * @param value Hodnota, která má být uložena do nového objektu Value.
     *
     * @return Nový objekt Value typu BOOLEAN se zadanou hodnotou.
     */
    public static IValue valueOf(boolean value)
    {
        return new BooleanValue(value);
    }
    
    /**
     * Vytvoří nový objekt Value typu INT se zadanou hodnotou.
     *
     * @param value Hodnota, která má být uložena do nového objektu Value.
     *
     * @return Nový objekt Value typu INT se zadanou hodnotou.
     */
    public static IValue valueOf(int value)
    {
        return new IntValue(value);
    }

    /**
     * Vytvoří nový objekt Value typu DOUBLE se zadanou hodnotou.
     *
     * @param value Hodnota, která má být uložena do nového objektu Value.
     *
     * @return Nový objekt Value typu DOUBLE se zadanou hodnotou.
     */
    public static IValue valueOf(double value)
    {
        return new DoubleValue(value);
    }

    /**
     * Vytvoří nový objekt Value typu STRING se zadanou hodnotou.
     *
     * @param value Hodnota, která má být uložena do nového objektu Value.
     *
     * @return Nový objekt Value typu STRING se zadanou hodnotou.
     */
    public static IValue valueOf(String value)
    {
        return new StringValue(value);
    }
    
    /**
     * Vytvoří nový objekt Value typu TUPLE se zadanými hodnotami.
     *
     * @param values Hodnotay které mají být uloženy v objektu Value.
     *
     * @return Nový objekt Value typu TUPLE se zadannými hodnotami.
     */
    public static IValue valueOf(List<IValue> values)
    {
        if (values == null || values.size() == 0)
        {
            return null;
        }

        return new TupleValue(values);
    }
}
